// price.js
const app = getApp()
const { API } = require('../../../utils/api.js')

Page({
  data: {
    fuelPrices: [], // 从后端API获取真实数据
    editingIndex: -1,
    tempPrice: ''
  },

  onLoad() {
    this.loadPrices()
  },

  onShow() {
    // 每次显示页面时重新加载价格，确保数据最新
    this.loadPrices()
  },

  async loadPrices() {
    try {
      wx.showLoading({
        title: '加载价格数据...'
      })

      // 从后端获取最新的油品价格
      const fuelTypes = await API.getFuelTypes()
      
      if (fuelTypes && fuelTypes.length > 0) {
        // 确保价格是字符串格式，便于前端显示和编辑
        const formattedFuelTypes = fuelTypes.map(fuel => ({
          ...fuel,
          price: fuel.price.toString()
        }))
        
        this.setData({
          fuelPrices: formattedFuelTypes
        })
        
        console.log('加载的油品价格数据:', formattedFuelTypes)
      }
      
      wx.hideLoading()
    } catch (error) {
      wx.hideLoading()
      console.error('获取油品价格失败:', error)
      
      wx.showToast({
        title: '获取价格数据失败',
        icon: 'error'
      })
      
      // 如果API调用失败，尝试从本地缓存获取
      const storedPrices = wx.getStorageSync('fuelPrices')
      if (storedPrices && storedPrices.length > 0) {
        this.setData({
          fuelPrices: storedPrices
        })
      }
    }
  },

  startEdit(e) {
    const index = e.currentTarget.dataset.index
    const currentPrice = this.data.fuelPrices[index].price
    
    this.setData({
      editingIndex: index,
      tempPrice: currentPrice
    })
  },

  onPriceInput(e) {
    this.setData({
      tempPrice: e.detail.value
    })
  },

  async savePrice() {
    const { editingIndex, tempPrice, fuelPrices } = this.data
    
    if (!tempPrice || isNaN(parseFloat(tempPrice))) {
      wx.showToast({
        title: '请输入有效价格',
        icon: 'error'
      })
      return
    }

    const price = parseFloat(tempPrice)
    const currentFuel = fuelPrices[editingIndex]
    
    if (price <= 0) {
      wx.showToast({
        title: '价格必须大于0',
        icon: 'error'
      })
      return
    }

    if (price > 50) {
      wx.showToast({
        title: '价格不能超过50元/升',
        icon: 'error'
      })
      return
    }

    // 确认价格变更
    const oldPrice = parseFloat(currentFuel.price)
    const priceChange = ((price - oldPrice) / oldPrice * 100).toFixed(1)
    const changeText = price > oldPrice ? `上涨${priceChange}%` : `下降${Math.abs(priceChange)}%`
    
    wx.showModal({
      title: '确认价格变更',
      content: `确定将${currentFuel.name}价格从¥${oldPrice}/升调整为¥${price}/升吗？\n变动幅度：${changeText}`,
      success: async (res) => {
        if (res.confirm) {
          await this.updatePriceToDatabase(currentFuel, price, editingIndex)
        }
      }
    })
  },

  async updatePriceToDatabase(currentFuel, price, editingIndex) {
    try {
      wx.showLoading({
        title: '更新价格中...'
      })

      console.log('正在更新价格:', {
        id: currentFuel.id,
        name: currentFuel.name,
        oldPrice: currentFuel.price,
        newPrice: price
      })

      // 调用后端API更新数据库中的价格
      const updatedFuel = await API.admin.updateFuelPrice({
        id: currentFuel.id,
        price: price
      })

      console.log('价格更新成功，后端返回:', updatedFuel)

      wx.hideLoading()

      // 更新本地数据
      const updatedPrices = [...this.data.fuelPrices]
      updatedPrices[editingIndex] = {
        ...updatedPrices[editingIndex],
        price: updatedFuel.price.toString(),
        // 同时更新其他可能的字段
        id: updatedFuel.id,
        type: updatedFuel.type,
        name: updatedFuel.name
      }

      this.setData({
        fuelPrices: updatedPrices,
        editingIndex: -1,
        tempPrice: ''
      })

      // 更新本地缓存，确保其他页面也能获取到最新价格
      wx.setStorageSync('fuelPrices', updatedPrices)
      
      // 通知其他页面价格已更新
      wx.setStorageSync('priceUpdateTime', Date.now())
      
      wx.showToast({
        title: '价格更新成功',
        icon: 'success',
        duration: 2000
      })

      console.log(`${currentFuel.name} 价格已从 ¥${currentFuel.price}/升 更新为 ¥${updatedFuel.price}/升`)
      
      // 记录价格变更日志
      this.logPriceChange(currentFuel, price)
      
    } catch (error) {
      wx.hideLoading()
      console.error('更新价格失败:', error)
      
      let errorMessage = '价格更新失败，请稍后重试'
      if (error.statusCode === 401) {
        errorMessage = '登录已过期，请重新登录'
        // 自动跳转到登录页
        setTimeout(() => {
          wx.redirectTo({
            url: '/pages/login/login'
          })
        }, 2000)
      } else if (error.statusCode === 403) {
        errorMessage = '没有管理员权限执行此操作'
      } else if (error.data && typeof error.data === 'string') {
        errorMessage = error.data
      }
      
      wx.showModal({
        title: '更新失败',
        content: errorMessage,
        showCancel: false
      })
    }
  },

  // 记录价格变更日志
  logPriceChange(fuel, newPrice) {
    try {
      const changeLog = {
        id: Date.now(),
        fuelId: fuel.id,
        fuelName: fuel.name,
        oldPrice: parseFloat(fuel.price),
        newPrice: newPrice,
        changeTime: new Date().toISOString(),
        operator: app.globalData.userInfo?.name || '管理员'
      }
      
      // 获取现有日志
      let logs = wx.getStorageSync('priceChangeLogs') || []
      logs.unshift(changeLog)
      
      // 只保留最近100条记录
      if (logs.length > 100) {
        logs = logs.slice(0, 100)
      }
      
      wx.setStorageSync('priceChangeLogs', logs)
      console.log('价格变更日志已记录:', changeLog)
    } catch (error) {
      console.error('记录价格变更日志失败:', error)
    }
  },

  cancelEdit() {
    this.setData({
      editingIndex: -1,
      tempPrice: ''
    })
  },

  batchUpdate() {
    wx.showModal({
      title: '批量调价',
      content: '确定要执行批量调价操作吗？',
      success: (res) => {
        if (res.confirm) {
          // 这里可以实现批量调价逻辑
          wx.showToast({
            title: '批量调价功能开发中',
            icon: 'none'
          })
        }
      }
    })
  },

  async resetPrices() {
    wx.showModal({
      title: '重置价格',
      content: '确定要重置为数据库初始价格吗？此操作将恢复所有油品的默认价格。',
      success: async (res) => {
        if (res.confirm) {
          try {
            wx.showLoading({
              title: '重置价格中...'
            })

            // 数据库中的默认价格
            const defaultPrices = [
              { id: 1, price: 7.23 }, // 92号汽油
              { id: 2, price: 7.78 }, // 95号汽油
              { id: 3, price: 8.65 }, // 98号汽油
              { id: 4, price: 7.10 }  // 0号柴油
            ]

            // 批量更新价格
            for (const fuel of defaultPrices) {
              await API.admin.updateFuelPrice({
                id: fuel.id,
                price: fuel.price
              })
            }

            wx.hideLoading()

            // 重新加载价格数据
            await this.loadPrices()
            
            this.setData({
              editingIndex: -1,
              tempPrice: ''
            })
            
            wx.showToast({
              title: '价格已重置',
              icon: 'success'
            })
            
          } catch (error) {
            wx.hideLoading()
            console.error('重置价格失败:', error)
            
            wx.showModal({
              title: '重置失败',
              content: '价格重置失败，请检查网络连接或稍后重试',
              showCancel: false
            })
          }
        }
      }
    })
  }
})